package utils

import (
	"bufio"
	"io"
	"strings"

	"github.com/zeromicro/go-zero/core/logx"
)

// ReadCloserToString 读取 io.ReadCloser 的内容并将其转换为字符串。
func ReadCloserToString(rc io.ReadCloser) (string, error) {
	var reader io.Reader = rc
	var buffer strings.Builder

	// 使用 bufio.Reader 以更有效的方式读取数据
	bufReader := bufio.NewReader(reader)
	for {
		line, err := bufReader.ReadString('\n') // 读取一行数据
		if err != nil && err != io.EOF {
			return "", err // 非EOF错误,返回错误
		}
		logx.Debugf("%s", line)
		buffer.WriteString(line)
		if err == io.EOF {
			break // EOF,读取完成
		}
	}

	return buffer.String(), nil
}

// ReadCloserToString 读取 io.ReadCloser 的内容并将其转换为字符串。
func ReadCloserToStringAsync(rc io.ReadCloser, c chan string) {
	var reader io.Reader = rc

	// 使用 bufio.Reader 以更有效的方式读取数据
	bufReader := bufio.NewReader(reader)
	for {
		line, err := bufReader.ReadString('\n') // 读取一行数据
		if err != nil && err != io.EOF {
			return
		}
		logx.Debugf("%s", line)
		c <- line
		if err == io.EOF {
			break // EOF,读取完成
		}
	}
}
